﻿//#define _CRT_SECURE_NO_WARNINGS  1
////一定要动手，例子不管多么简单，建议至少自己手敲一遍看看是否理解了里头的细枝末节。
////一定要学会思考，思考为什么要这样，而不是那样。还要举一反三地思考
//#include<string>
//#include<iostream>
//using namespace std;
////提前知道person类的存在
//template <class T1,class T2>
//class person;
////提前知道全局函数的存在
//template <class T1, class T2>
//void showperson2(person<T1, T2> p)
//{
//	cout << "全局函数在类外实现 ---姓名：" << p._name << "年龄：" << p._age << endl;
//}
//template <class T1 ,class T2>
//class person {
//private:
//	T1 _name;
//	T2 _age;
//public:
//	person(T1 name, T2 age)
//	{
//		this->_name = name;
//		this->_age = age;
//	}
//	//全局函数类内实现
//	friend void showperson(person<T1 ,T2> p)
//	{
//		cout << "姓名：" << p._name << "年龄：" << p._age << endl;
//	}
//	//全局函数在类外实现
//	//加空模板的参数列表
//	friend void showperson2<>(person<T1, T2> p);
//
//};
//
//
////成员函数类外实现
////构造函数类外实现
////template<class T1,class T2>
////person<T1, T2>::person(T1 name, T2 age)
////{
////	this->_name = name;
////	this->_age = age;
////}
////template <class T1 ,class T2>
////void person<T1, T2>::showperson()
////{
////	cout << "姓名：" << this->_name << "年龄：" << this->_age << endl;
////}
////全局函数在类内实现的测试
//void test()
//{
//	person<string, int >p("孙悟空", 999);
//	showperson(p);
//}
////全局函数在类外实现的测试
//void test2()
//{
//	person<string, int >p2("猪八戒", 888);
//	showperson(p2);
//}
//
//int main()
//{
//	test();
//	test2();
//	system("pause");
//	return 0;
//}